package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

public class StudentDao implements BaseStudentDao{

    //形参里接到学生信息要开始创建数组
    private static Student[] s1 = new Student[5];
    static {
        Student s = new Student("allen001","allen","18","1994-09-30");
        s1[0]=s;
    }
    //真正把学生加入数组的方法

    @Override
    public boolean addStudent(Student s) {
        //把学生加入数组
        //加入前先定义index为-1，用于决定添加成功与否，以及返回值的对错信息
        int index = -1;
        //遍历数组，用判断 索引上的值是否等于null（数组默认值）知道数组是否存满
        for (int i = 0; i < s1.length; i++) {
            Student temp = s1[i];
            if (temp == null) {
                index = i;
                break;
            }
        }
        //利用index是否等于-1来判断是否存满返回false，若未满，正常存，并返回ture
        if (index == -1) {
            return false;
        } else {
            s1[index] = s;
            return true;
        }
    }

    //把现有对象返给业务逻辑的方法
    public Student[] findAllStudent() {
        //给业务逻辑返回数组，让业务逻辑自己判断
        return s1;
    }

    //真正删除学生的方法
    public void deleteStudentById(String id) {
        //库管是删除方法的主要实施方
        //1.查找id对应的索引位置，因为查找id的功能经常用，所以可以另外新增这个方法，然后调用它,接受返回值（索引）。
        int index = getId(id);

        //2.将该索引位置上的值，用null覆盖。
        /*不用考虑index是不是-1，因为在删之前，就已经查询过id存在数组里，
        必然会符合getId()方法的判断语句，然后赋上对应的索引号给index。*/
        s1[index] = null;
    }

    //通过id查找对应索引号的方法
    public int getId(String getid) {
        int index = -1;
        for (int i = 0; i < s1.length; i++) {
            Student temp = s1[i];
            if (temp != null && temp.getId().equals(getid)) {//判断条件是找到了！
                index = i;//把索引赋值给index
                break;
            }
        }
        return index;
    }

    //接受业务逻辑传来的旧学生id及新学生对象进行替换的方法
    public void updataStudent(String id, Student news) {
        //遍历学生id，找出对应索引，可以调用查找索引的方法
        int index = getId(id);
        //将新的学生对象进行替换
        s1[index] = news;
    }
}
